package Palindrome;

import java.util.Scanner;


/**
 * Нахождение всех палиндромов в строке
 *
 * @author Artur Dzidzoiev
 * @version 1.1.1 09 Oct 2013
 */
public class Palindromes {


    /**
     * Минимальная длина палиндрома - 3
     */
    final static int MIN_LENGTH = 3;

    /**
     * ВВод строки с клавиатуры, нахождение палиндромов и вывод их на экран
     */
    public static void main(String[] args) {
        String input = getString();
        String result = FindPalindromes(input);
        System.out.print(setOutput(result));
    }

    /**
     * Ввод значений
     */
    private static String getString() {
        Scanner in = new Scanner(System.in);
        System.out.print("Input string: ");
        String input = in.nextLine();
        in.close();
        return input;
    }

    /**
     * Форматирование строки результатов поиска палиндромов
     *
     * @param result - результат поиска палиндромов
     * @return строка на вывод
     */
    private static String setOutput(String result) {
        return result.equals("")
               ? "String contains any palindromes."
               : String.format("String contains palindromes:\n%s",result);
    }

    /**
     * Нахождение палиндромов в строке
     */
    private static String FindPalindromes(String input) {
        StringBuilder result = new StringBuilder();
        input = deleteSpaces(input);
        int number = 1;

        for (int start = 0; start < input.length() - MIN_LENGTH; start++) {
            for (int end = input.length(); end >= MIN_LENGTH + start; end--) {
                String operatingStr = input.substring(start,end);
                if (checkIsPalindrome(operatingStr)) {
                    result.append(String.format("%s) %s;\n", number++ ,operatingStr));
                }
            }
        }
        return result.toString();
    }

    /**
     * Сравнение строки относительно середины
     *
     * @return true если строка палиндром
     */
    private static boolean checkIsPalindrome(String newStr) {
        return  (newStr.equalsIgnoreCase(new StringBuilder(newStr).reverse().toString()));
    }

    /**
     * Удалить все пробелы со строки
     */
    private static String deleteSpaces(String inputStr) {
        return inputStr.replaceAll("\\s+","");
    }
}